package i2.application.fmw.cerbere.selenium.scenario;

import i2.application.fmw.cerbere.Annuaire;
import i2.application.fmw.cerbere.EntiteType;
import i2.application.fmw.cerbere.UtilisateurType;
import i2.application.fmw.cerbere.selenium.pages.AccueilApplicationPage;
import i2.application.fmw.cerbere.selenium.pages.CerbereErrorPage;
import i2.application.fmw.cerbere.selenium.pages.CerberePage;
import i2.application.fmw.selenium.exceptions.WrongPageException;

import java.io.File;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.support.PageFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.thoughtworks.selenium.Wait;

public class ValiderTousLesUtilisateursCerbere {

	private static final Logger LOGGER = LoggerFactory.getLogger(ValiderTousLesUtilisateursCerbere.class);
	private CerberePage page;
	private WebDriver driver;
	
	@Before
	public void openTheBrowser() {
//		page = PageFactory.initElements(new HtmlUnitDriver(), CerberePage.class);
//		page.open("http://traversaine.dsi.damgm.i2/lise");
//		driver = new ChromeDriver();
		driver = new InternetExplorerDriver();
	}

	@Test
	public void logAllUsers() {
		LOGGER.debug("begin logAllUsers()");
		
		JAXBContext jc = null;
		Unmarshaller unmarshaller = null;
		Annuaire annuaire = null;
		try {
			jc = JAXBContext.newInstance("i2.application.fmw.cerbere");
			unmarshaller = jc.createUnmarshaller();
			annuaire = (Annuaire) unmarshaller.unmarshal(new File("D:/cerbere-bouchon.xml"));
//			annuaire = (Annuaire) unmarshaller.unmarshal(this.getClass().getResource("/cerbere-bouchon.xml"));
		} catch (JAXBException e) {
			e.printStackTrace();
		}
		
		for (EntiteType entite : annuaire.getEntites().getEntite()) {
			for (UtilisateurType utilisateur : entite.getUtilisateurs().getUtilisateur()) {
				page = PageFactory.initElements(driver, CerberePage.class);
				page.open("http://traversaine.dsi.damgm.i2/trafic3000/");
				LOGGER.info("log in cerbere with profil {}",utilisateur.getIdentifiant());
				
				try {
					final AccueilApplicationPage accueil = page.login(utilisateur);
					
					try {
						LOGGER.debug("calling deconnecter");
						accueil.deconnecter();
					} catch (NoSuchElementException e) {
						LOGGER.error("profil en erreur : {}", utilisateur.getIdentifiant());
						final CerbereErrorPage errorPage = new CerbereErrorPage(driver);
						PageFactory.initElements(driver, errorPage);
						errorPage.continuer();
					} 
					
				} catch (WrongPageException e) {
					LOGGER.error("profil en erreur : {}", utilisateur.getIdentifiant());
					final CerbereErrorPage errorPage = new CerbereErrorPage(driver);
					PageFactory.initElements(driver, errorPage);
					errorPage.continuer();
				} catch (Exception e ) {
					LOGGER.error("", e);
				}
				
				
				
//				Wait wait =  new Wait() {
//
//					@Override
//					public boolean until() {
//						LOGGER.debug("until");
//						return accueil.getTitle().equals("Trafic2000");
//					}
//					
//				};
//				
//					LOGGER.debug("before wait");
//					try {
//						wait.wait("Accueil not found", 5000);
//					} catch (Exception e) {
//						LOGGER.error("", e);
//					}
//					LOGGER.debug("after wait");
				
				
			}
		}
		
	}

	@After
	public void closeTheBrowser() {
		page.close();
	}
}
